//
// Created by ds on 24-6-28.
//

#ifndef SUMOSIMULATION_H
#define SUMOSIMULATION_H

#include <map>
#include <queue>

#include "SumoEntity.h"

class SumoSimulation {
    map<string, SumoActor> actors;
    queue<string> departedIDQueue;
    queue<string> arrivedIDQueue;

public:
    SumoSimulation();

    map<string, SumoActor> getActors() const;

    queue<string> getDepartedIDList() const;

    queue<string> getArrivedIDList() const;

    /**
     * 添加新加入sumo的车辆id列表
     * @param idList sumo车的id列表
     */
    void addDepartedID(const string &idList);

    /**
        * 移除新加入的车辆id队列第一个
        */
    void removeDepartIDQueuePop();

    /**
     * 添加离开sumo的车辆id列表
     * @param idList sumo车的id列表
     */
    void addArrivedID(const string &idList);

    /**
     * 移除已经离开sumo的车辆id队列第一个
     */
    void removeArrivedIDQueuePop();

    /**
     * 添加或更新sumoActor信息
     * @param actor SumoActor
     */
    void addSumoActor(const SumoActor &actor);

    /**
     * 通过sumo车的id获取SumoActor
     * @param id sumo车ID
     * @return SumoActor
     */
    SumoActor getActorByID(const string &id) const;
};


#endif //SUMOSIMULATION_H
